--[[ 编码: WMS-82-10 名称: 批量入库测试-错误重置 作者:HAN 日期:2025-1-29 入口函数: ResetAllocation 功能说明: 从新进行货位分配计算 更改记录: --]] wms_wh = require( "wms_wh" ) local function set_error_info( strLuaDEID, id, strErr ) local nRet, strRetInfo local strSetSQL = "S_ERR = '"..strErr.."'" strCondition = "S_ID = '"..id.."'" nRet, strRetInfo = mobox.updateDataAttrByCondition(strLuaDEID, "TEST_Inbound", strCondition, strSetSQL) if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "设置【上架策略测试】信息失败!"..strRetInfo) end end local function alloc_location( strLuaDEID, test ) local item_info = {} local nRet, strRetInfo item_info.cntr_code = test.cntr_code item_info.item_code = test.item_code item_info.item_name = test.item_name item_info.batch_no = test.batch_no if ( test.area_code ~= '' ) then nRet, strRetInfo = wms.wms_GetAreaAvaliableLocByRule( strLuaDEID, test.area_code, test.put_away, lua.table2str(item_info) ) else nRet, strRetInfo = wms.wms_GetWHAvaliableLocByRule( strLuaDEID, test.wh_code, test.put_away, lua.table2str(item_info) ) end if ( nRet ~= 0 ) then lua.Debug( strLuaDEID, debug.getinfo(1), "根据上架策略计算可上架货位失败!", strRetInfo ) set_error_info( strLuaDEID, test.id, "根据上架策略计算可上架货位失败! 见调试日志" ) return end if ( strRetInfo == '') then set_error_info( strLuaDEID, test.id, "根据上架策略没有符合条件的货位!" ) return end local success local ret_loc success, ret_loc = pcall( json.decode, strRetInfo) if ( success == false or ret_loc.loc_code == nil or ret_loc.loc_code == '') then lua.Debug( strLuaDEID, debug.getinfo(1), "上架策略返回json不合法!", strRetInfo ) set_error_info( strLuaDEID, test.id, "上架策略返回json不合法! 见调试日志" ) return end -- 不生产作业进行模拟,直接入库 local loc nRet, loc = wms_wh.GetLocInfo( ret_loc.loc_code ) if ( nRet ~= 0 ) then lua.Debug( strLuaDEID, debug.getinfo(1), "WMS_GetLocInfo失败!", loc ) set_error_info( strLuaDEID, test.id, "WMS_GetLocInfo失败! 见调试日志" ) return end lua.Debug( strLuaDEID, debug.getinfo(1), "loc", loc ) nRet, strRetInfo = wms_wh.Loc_Container_Binding( strLuaDEID, loc.code, test.cntr_code, "绑定解绑方法-系统", "测试" ) if ( nRet ~= 0 ) then lua.Debug( strLuaDEID, debug.getinfo(1), "货位容器绑定错误!", strRetInfo ) set_error_info( strLuaDEID, test.id, "货位容器绑定错误! 见调试日志" ) return end -- 加库区/库量表 (通过CG_Detail) nRet, strRetInfo = wms_base.Add_WHAreaQty_ByCGDetail(strLuaDEID, loc.wh_code, loc.area_code, test.cntr_code ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), strRetInfo ) end local strSetSQL = "S_LOC_CODE = '"..loc.code.."', N_ROW = "..loc.row..", N_COL = "..loc.col..", N_LAYER = "..loc.layer strSetSQL = strSetSQL..", N_POS = "..loc.pos..", N_ROW_GROUP = "..loc.row_group..", N_AISLE = "..loc.aisle..", S_ERR=''" strCondition = "S_ID = '"..test.id.."'" nRet, strRetInfo = mobox.updateDataAttrByCondition(strLuaDEID, "TEST_Inbound", strCondition, strSetSQL) if (nRet ~= 0) then lua.Error( strLuaDEID, debug.getinfo(1), "设置【上架策略测试】信息失败!"..strRetInfo) end end function ResetAllocation ( strLuaDEID ) local nRet, strRetInfo local objs -- step1 获取当前点中的作业 nRet, objs = m3.GetSysDataJson( strLuaDEID ) if ( nRet ~=0 ) then lua.Error( strLuaDEID, debug.getinfo(1), objs ) end -- [{"id":"","attrs":[{"attr":"","value":""},..]},..] local nCount = #objs if (nCount == 0) then return end local strObjJson local success local test = {} for n = 1, nCount do -- 检查一下N_B_STATE是否=3(错误) nRet, strObjJson = mobox.objAttrsToLuaJson( "TEST_Inbound", lua.table2str( objs[n].attrs ) ) success, test = pcall( json.decode, strObjJson ) test.id = lua.trim_guid_str( objs[n].id ) lua.Debug( strLuaDEID, debug.getinfo(1), "test", test ) if ( success == false ) then lua.Error( strLuaDEID, debug.getinfo(1), "objAttrsToLuaJson (Operation) 返回的的JSON格式不合法 !"..operation ) end if ( test.err ~= "" and test.loc_code == '' ) then alloc_location( strLuaDEID, test ) end end -- 如果就是一行刷新当前行 if ( nCount == 1 ) then local strAction = '[{"action_type":"refresh_cur_row","value":""}]' nRet, strRetInfo = mobox.setAction(strLuaDEID, strAction) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "setAction错误: "..strRetInfo) end end end